require 'rubygems'
require 'savon'
#require_relative 'product.rb'

class ProductInfo

  def initialize

    @client = Savon::Client.new do
      wsdl.document = "http://sql2.students.ic.unicamp.br/~ra043251/mc747/DetalheProduto.wsdl"
      #      wsdl.element_form_default = :unqualified
    end

  end

  def get_categories
    
    r = @client.request :listar_categorias
    h = r.to_hash
    list = h[:listar_categorias_response][:return][:item]

    categories = Array.new

    list.each do |ci|

      c = ci[:item]
      categories.push Category.new(c[0], c[1], c[2])

    end

    categories

  end

  def search(for_word)

    r = @client.request :busca_por_strings do
      soap.body = {
        :palavra => for_word
      }
    end
    h = r.to_hash

    products = Array.new

    list = h[:busca_avancada_response][:return][:item];

    if list.nil?
      return products
    end

    list.each do |ci|

      c = ci[:item]
      id = c[0]
      # get images
      #imgs = get_prod_pic id # isso demora mto

      products.push Product.new(id, c[1], c[7], "", c[6]) #nao dah o preco, to colocando o peso no lugar!
    end

    products

  end

  def get_prod_pic(prod_id)

    r = @client.request :imagens_produto do
      soap.body = {
        :id => prod_id
      }
    end
    h = r.to_hash

    imgs = Array.new

    list = h[:imagens_produto_response][:return][:item]

    if list.nil?
      return imgs
    end
   
    if list.is_a? Array
      list.each do |c|
        cc = c[:item]
        cc.each do |ci|
          if ci.kind_of? String
            imgs.push ci
          end
        end

      end   
    else
      cc = list[:item]
      cc.each do |ci|
        if ci.kind_of? String
          imgs.push ci
        end
      end
    end

    imgs

  end

  def get_products(id_category)

    r = @client.request :busca_avancada do
      soap.body = {
        :categoria_id => id_category
      }
    end
    h = r.to_hash

    products = Array.new

    list = h[:busca_avancada_response][:return][:item];

    if list.nil?
      return products
    end

    list.each do |ci|

      c = ci[:item]
      id = c[0]
      # get images
      #imgs = get_prod_pic id # isso demora mto

      products.push Product.new(id, c[1], c[7], "", c[6]) #nao dah o preco, to colocando o peso no lugar!
    end

    products

  end

  def get_product(prod_id)

    r = @client.request :exibe_detalhes_id do
      soap.body = {
        :id => prod_id
      }
    end
    h = r.to_hash

    c = h[:exibe_detalhes_id_response][:return][:item]
    id = c[0]
    imgs = get_prod_pic id
    Product.new(id, c[1], c[7], imgs[0], c[6]) #nao dah o preco, to colocando o peso no lugar!

  end

end
